package main

import "fmt"

type student struct {
	Name string
	Age  int
}

func pase_student() map[string]*student {
	m := make(map[string]*student)
	stus := []student{
		{"zhou", 24},
		{"li", 23},
		{"wang", 22},
	}
	for i, _ := range stus {
		fmt.Println("111",stus)
		stu:=stus[i]
		m[stu.Name] = &stu
	}
	return m
}
func main() {
	students := pase_student()
	fmt.Println(students)
	for k, v := range students {
		fmt.Printf("key=%s,value=%v\n", k, v)
	}
}

/*
执行结果：
key=zhou,value=&{wang 22}
key=li,value=&{wang 22}
key=wang,value=&{wang 22}
发现value都是一样的，这是因为19行的&stu是指针，地址都保持不变，所以每个遍历都是值拷贝，所以实际上
m[stu_Name]=%stu都是指向的是同一个地址，最终遍历后的值都是最后一个map的值,wang,22
应该改成
for i, _ := range stus {
		stu=stus[i]
		m[stu.Name] = &stu
	}
以上代码是将stus遍历的每个值进行拷贝,拷贝完后每个地址的值都不一样。
*/